package thread;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 线程池
 * 线程池是线程的管理机制，主要解决两个问题
 * 1、重复使用线程
 * 2、控制线程数量
 *
 * 线程池在 java.util.concurrent包
 * JUC
 */
public class ThreadPoolDemo {
    public static void main(String[] args) {
        // 创建线程池
        ExecutorService executorService =  Executors.newFixedThreadPool(2);
        for (int i = 0; i < 5; i++){
            // 创建线程任务
            Runnable r = new Runnable() {
                @Override
                public void run() {
                    // System.out.println(Thread.currentThread().getName());
                    try {
                        // 创建线程
                        Thread rt = Thread.currentThread();
                        System.out.println(rt.getName() + "正在执行任务！");
                        Thread.sleep(1000);
                        System.out.println(rt.getName() + "执行任务完毕！ \n" );
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            };
            executorService.execute(r);
        }
        /*
        shutdown()：关闭线程池，线程池不再接受新的任务，但是会继续执行已经提交的任务。
        shutdownNow()：关闭线程池，线程池不再接受新的任务，并且会中断正在执行的任务。
         */
        // 中断线程池
        executorService.shutdown();
        // executorService.shutdownNow();
    }
}
